package com.lobov.containers;

import java.io.Serializable;

import org.apache.hadoop.io.Text;

import com.lobov.entities.yale.MatrixYale;
import com.lobov.entities.yale.SnipYale;
import com.lobov.operations.yale.MultiplicationYale;

/**
 * Контейнер для хранения перемножаемых матриц или матрицы и вектора (hasvector
 * - присутствует ли в умножении вектор иначе только матрицы)
 */
public class MultiPairYale implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * создать контейнер для двух матриц
	 * 
	 * @param m1
	 *            первая заданная матрица
	 * @param m2
	 *            вторая заданная матрица
	 */
	public MultiPairYale(MatrixYale m1, MatrixYale m2) {
		super();
		this.m1 = m1;
		this.m2 = m2;
		this.hasSnip = false;
	}

	/**
	 * 
	 * @param m1
	 *            заданная матрица
	 * @param snip
	 *            оскут
	 */
	public MultiPairYale(MatrixYale m1, SnipYale snip) {
		super();
		this.m1 = m1;
		this.setSnip(snip);
		this.hasSnip = true;
	}

	private boolean hasSnip;
	private MatrixYale m1;
	private MatrixYale m2;
	private SnipYale snip;


	public MatrixYale getM1() {
		return m1;
	}

	public void setM1(MatrixYale m1) {
		this.m1 = m1;
	}

	public MatrixYale getM2() {
		return m2;
	}

	public void setM2(MatrixYale m2) {
		this.m2 = m2;
	}



	public boolean isHasSnip() {
		return hasSnip;
	}

	public void setHasSnip(boolean hasSnip) {
		this.hasSnip = hasSnip;
	}

	public SnipYale getSnip() {
		return snip;
	}

	public void setSnip(SnipYale snip) {
		this.snip = snip;
	}

	public Object compute() throws Exception {
		if(!hasSnip){
			return MultiplicationYale.newInstance().matrixOnMatrix(m1, m2, false);
		} else if(hasSnip){
			return MultiplicationYale.newInstance().snipOnMatrix(snip, m1, false);
		}
		return null;
	}
	
	public Text toTextMatrixAndSnip(){
		return new Text(m1.toText().toString() + "###" + snip.toText().toString());
	}
	public Text toTextMatrixAndMatrix(){
		return new Text(m1.toText().toString() +"###"+ m2.toText().toString());
	}
	
}
